/*
 * Copyright (c) 2014. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
 * http://www.apache.org/licenses/LICENSE-2.0
 */

package com.dc.gameserver.serverCore.model.dbsql.modelCache;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

/**
 * @author 石头哥哥
 *         Date: 13-11-25</br>
 *         Time: 下午4:43</br>
 *         Package: com.dc.gameserver.serverCore.model.dbsql.modelService</br>
 *         注解：数据库持久vo，加入redis缓存模块，处理策略如下：
 *         1.当更新（添加，删除）数据，同步操作数据库和redis缓存两个模块部分，先更新数据库，然后更新缓存，保证缓存和数据库的数据一致性；
 *         2.查询数据，优先查找redis缓存模块，如果redis中没有数据，那么直接加载数据库，并将数据缓存在redis；
 *         3.当玩家下线之后，先更新数据库，在清理缓存数据（定时清理）；
 */
public interface imodelCacheService {


    /**
     * @param key
     * @param value       其中 list中的数据应该实现序列化接口
     */
    public void addObject(String key,String value);
    /**
     *
     * @return
     */
    public String find(String key);

    /**
     * 删除 缓存 key对应的value
     *
     * @param key
     */
    public void delete(String key) ;

    /**
     * RedisServiceObject
     * @param ID
     */
    public void addObject(final int ID,final Serializable obj);

    /**
     *  RedisServiceObject
     * @param ID
     * @return
     */
    public  Serializable find(final int ID);

    /**
     * RedisServiceObject
     * @param ID
     * @return
     */
    public void delete(final int ID);
    /**
     *  RedisServiceList
     * @param ID
     * @param list
     */
    public void  addList(final int ID,final List<?> list);
    /**
     *  RedisServiceList
     * @param ID
     * @return
     */
    public List<?> findList(final int ID);

    /**
     *    RedisServiceList
     * @param ID
     */
    public void deleteLsit(final int ID);


    /**
     *    RedisServiceMap
     * @param ID
     * @param map
     */
    public void  addMap(final int ID,final Map<?,?> map);

    /**
     *   RedisServiceMap
     * @param ID
     * @return
     */
    public Map<?, ?> findMap(final int ID);


    /**
     *     RedisServiceMap
     * @param ID
     */
    public void deleteMap(final int ID);


    /***prefix+roleID ==key   cache value********/
    /**
     * RedisServiceObject
     * @param ID
     */
    public void addObjectPrefixID(final String ID,final Serializable obj);

    /**
     *  RedisServiceObject
     * @param ID
     * @return
     */
    public  Serializable findByPrefixID(final String ID);

    /**
     * RedisServiceObject
     * @param ID
     * @return
     */
    public void deleteByPrefixID(final String ID);
    /**
     *  RedisServiceList
     * @param ID
     * @param list
     */
    public void  addListByPrefixID(final String ID,final List<?> list);
    /**
     *  RedisServiceList
     * @param ID
     * @return
     */
    public List<?> findListByPrefixID(final String ID);

    /**
     *    RedisServiceList
     * @param ID
     */
    public void deleteLsitByPrefixID(final String ID);


    /**
     *    RedisServiceMap
     * @param ID
     * @param map
     */
    public void  addMapByPrefixID(final String ID,final Map<?,?> map);

    /**
     *   RedisServiceMap
     * @param ID
     * @return
     */
    public Map<?, ?> findMapByPrefixID(final String ID);


    /**
     *     RedisServiceMap
     * @param ID
     */
    public void deleteMapByPrefixID(final String ID);








}
